/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.chframework.common.thread.threadlocal;

import com.alibaba.ttl.TransmittableThreadLocal;
import org.springframework.web.context.request.RequestAttributes;

/**
 * 实现一个线程安全的TTL
 *
 * ● 在三种情况下request有效：
 * - service函数内
 * - doFilter函数内
 * - startAsync开启的异步线程
 *
 * ● 在以上三种情况之外，使用request会产生不确定的结果(indeterminate results)！
 */
public class TTLRequestContextHolder {

    private static final TransmittableThreadLocal<RequestAttributes> REQUEST_ATTRIBUTES_HOLDER = new TransmittableThreadLocal<>();

    /**
     * 设置请求上下文
     */
    public static void setPoolThreadContext(RequestAttributes requestAttributes) {
        REQUEST_ATTRIBUTES_HOLDER.set(requestAttributes);
    }

    /**
     * 获取请求上下文
     */
    public static RequestAttributes getPoolThreadContext() {
        return REQUEST_ATTRIBUTES_HOLDER.get();
    }

    /**
     * 清除请求上下文
     */
    public static void clearPoolThreadContext() {
        REQUEST_ATTRIBUTES_HOLDER.remove();
    }

}
